package org.wangblue.object_structure;

import org.wangblue.elements.ItemElement;
import org.wangblue.visitor.Visitor;

import java.util.ArrayList;

/**
 * @description: 能枚举它的元素， 可以提供一个高层接口以允许访问者访问它的元素
 * @author: WangBlue (wangjiping596@gmail.com)
 * @create: 2024-10-08 15:56
 * @Version: 1.0
 **/

public class ObjectStructure {
    private final ArrayList<ItemElement> elements = new ArrayList<>();

    /**
     * 添加元素
     * @param element 要添加的元素
     */
    public void attach(ItemElement element) {
        elements.add(element);
    }


    /**
     * 移除元素
     * @param element 要移除的元素
     */
    public void detach(ItemElement element) {
        elements.remove(element);
    }

    /**
     * 遍历元素并访问
     * @param visitor 访问者
     */
    public void display(Visitor visitor) {
        for (ItemElement element : elements) {
            element.accept(visitor);
        }
    }
}
